#include "CajaTexto.h"
#include "../constantes.h"
#include <iostream>

using namespace std;

CajaTexto::CajaTexto(int x, int y, int ancho, int alto){

	this->x = x;
	this->y = y;
	this->ancho = ancho;
	this-> alto = alto;

	if (TTF_Init() == -1){
		cout << "ERROR al inicializar TTF!" << endl;
	} else {
		cout << "Se inicializo bien" << endl;
	}

	this->fuente = TTF_OpenFont("C:/WINDOWS/Fonts/Cour.ttf", 12);
	if(this->fuente == NULL){
	  	cout << "PUNTERO NULO!!!" << endl;
	} else {
		cout << "Se inicializo OK la fuente!" << endl;
	}

	SDL_Colour color = {0x00,0x00,0x00};
	this->color_texto = color;
	this->seleccionado = false;

}

void CajaTexto::dibujarTexto(SDL_Renderer* renderer) {

	int cantidadCaracteres = this->ancho / ANCHO_LETRA;
	cantidadCaracteres--;

	if (alto > ALTO_LETRA + 5) {

		string msgAMostrar = "";

		if(this->texto.length() <= (unsigned int)cantidadCaracteres){

			msgAMostrar = this->texto;

		} else {

		    int start = texto.length() - cantidadCaracteres;
		    int end = texto.length() - 1;
		    msgAMostrar = this->texto.substr(start,end);
		}


		SDL_Surface* surfaceMsg;
		surfaceMsg = TTF_RenderText_Solid(this->fuente, msgAMostrar.c_str(), this->color_texto);
		SDL_Rect rectMsg;
		rectMsg.x = x + 2;
		rectMsg.y = y + (alto - ALTO_LETRA)/2;

		SDL_Texture * tex = SDL_CreateTextureFromSurface(renderer, surfaceMsg);
		SDL_QueryTexture(tex, NULL, NULL, &rectMsg.w,&rectMsg.h);
		SDL_RenderCopy(renderer, tex, NULL, &rectMsg);
		SDL_DestroyTexture(tex);
		SDL_FreeSurface(surfaceMsg);
	}
}

void CajaTexto::detectarEventos(SDL_Event evento){

	if(evento.type == SDL_MOUSEBUTTONDOWN && evento.button.button == SDL_BUTTON_LEFT) {

		if ( (evento.button.x >= x) && (evento.button.x <= x + ancho)
			&& (evento.button.y >= y) && (evento.button.y <= y + alto) ) {
			cout << "Clickeo en el textbox" << endl;
			this->seleccionado = true;
		} else {
			this->seleccionado = false;
		}

	} else if(evento.type == SDL_TEXTINPUT && seleccionado) {

        char* caracterPrueba = evento.text.text;
    	this->texto += caracterPrueba;

    } else if (evento.type == SDL_KEYDOWN && seleccionado && evento.key.keysym.sym == SDLK_BACKSPACE) {
        this->texto = this->texto.substr(0,this->texto.length()-1);
    }
}

void CajaTexto::setTexto(string txt){
	this->texto = txt;
}

string CajaTexto::getTexto() {
    return this->texto;
}

CajaTexto::~CajaTexto(){

}

